/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cliente;

import interfaz.PFinFase;
import interfaz.PJuego;
import interfaz.PNiveles;
import interfaz.PPrincipal;
import interfaz.PRanking;
import interfaz.PGameOver;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JApplet;

/**
 *
 * @author pedro
 */
public class Principal extends JApplet{

    /**
     * Initialization method that will be called after the applet is loaded into
     * the browser.
     */
    private PPrincipal principal;
    private PJuego juego;
    private PNiveles niveles;
    private PFinFase finfase;
    private PRanking ranking;
    private PGameOver gameover;
    
    private GestorFase gestor;
    private int width = 800;
    private int height = 600;
    
    public int getWidth(){
        return width;
    }
    
    public int getHeight(){
        return height;
    }

    public PJuego getJuego() {
        return juego;
    }

    public void init() {
        
        setSize(new Dimension(width, height));
        
        initJuego();
        initNiveles();
        initPrincipal();
        initFinFase();
        initRanking();
        initGameOver();
              
        add(juego);
        add(niveles);
        add(principal);
        add(finfase);
        add(ranking);
        add(gameover);
    }
    public Principal getApplet (){
        return this;
    }
    public PJuego getVjuego() { // lo añadi yo
        return juego;
    }

   
    public void start(){
        gestor= new GestorFase(this);
        changeToPrincipal();      
        //changeToJuego(-1);
    }
    
    // TODO overwrite start(), stop() and destroy() methods
    
    public void changeToNiveles(){
        niveles.InitButtons(gestor.getLevel());
        juego.setVisible(false);
        niveles.setVisible(true);
        principal.setVisible(false);
        finfase.setVisible(false);
        ranking.setVisible(false);
        gameover.setVisible(false);
    }
       
    public void changeToJuego(int level){
        int width= juego.getjPanel2().getWidth();
        int height = juego.getjPanel2().getHeight();
        juego.setDoblebuffer(juego.getjPanel2().createImage(width,height));
        juego.setjLabel1("Computer");
        juego.setjLabel2(principal.getUser());
        juego.setVisible(true);
        niveles.setVisible(false);
        principal.setVisible(false);
        finfase.setVisible(false);
        ranking.setVisible(false);
        gameover.setVisible(false);
        gestor.cargarNivel(level);
        juego.setFocusable(true);
    }
    
    public void changeToPrincipal(){
        //juego.setDoblebuffer(null);
        juego.setVisible(false);
        niveles.setVisible(false);
        principal.setVisible(true);
        finfase.setVisible(false);
        ranking.setVisible(false);
        gameover.setVisible(false);
    }
    
    public void changeToFinFase(Fase f){
        juego.setDoblebuffer(null);
        juego.resetScores();
        juego.setVisible(false);
        niveles.setVisible(false);
        principal.setVisible(false);
        finfase.setVisible(true);
        ranking.setVisible(false);
        gameover.setVisible(false);
        finfase.setF(f);
        finfase.InitFinFase(f.getNumero(), f.getPlayer1(), f.getPlayer2(), f.getScore1(), f.getScore2(), f.getTime());
    }
    
    public void changeToRanking(Fase f){
        juego.setDoblebuffer(null);
        juego.resetScores();
        juego.setVisible(false);
        niveles.setVisible(false);
        principal.setVisible(false);
        finfase.setVisible(false);
        ranking.setVisible(true);
        gameover.setVisible(false);
        ranking.setF(f);
        ranking.ResetRank();
        ranking.InitRank(f.getRanking());
    }
    
    public void changeToGameOver(){
        juego.setDoblebuffer(null);
        juego.resetScores();
        juego.setVisible(false);
        niveles.setVisible(false);
        principal.setVisible(false);
        finfase.setVisible(false);
        ranking.setVisible(false);
        gameover.setVisible(true);
    }
        
    private void initJuego(){
        juego = new PJuego();
        juego.setSize(new Dimension(width, height));
        juego.setVisible(false);
        
        juego.getbtPause().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                juego.setPausa(!juego.getPausa());
                gestor.pausar(juego.getPausa());
                //gestor.save();
            }
        });
    }
    
    private void initNiveles(){
        niveles = new PNiveles();
        niveles.setSize(new Dimension(width, height));
        niveles.setVisible(false);
        
        niveles.getjButton1().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(1);
            }
        });
        
        niveles.getjButton2().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(2);
            }
        });
        
        niveles.getjButton3().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(3);
            }
        });
        
        niveles.getjButton4().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(4);
            }
        });
        
        niveles.getjButton5().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(5);
            }
        });
        
        niveles.getjButton6().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(6);
            }
        });
        
        niveles.getjButton7().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(7);
            }
        });
        
        niveles.getjButton8().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(8);
            }
        });
        
        niveles.getjButton9().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(9);
            }
        });
        
        niveles.getjButton10().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(10);
            }
        });
        
        niveles.getBtAtras().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToPrincipal();
            }
        });
    }
    
    private void initPrincipal(){
        principal = new PPrincipal();
        principal.setSize(new Dimension(width, height));
        principal.setVisible(false);

        principal.getElegir().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                if(!principal.getUser().equals("")) {
                    gestor.setUsuario(principal.getUser());
                    changeToNiveles();
                }
            }
        });
        
        principal.getContinuar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                if(!principal.getUser().equals("")) {
                    gestor.setUsuario(principal.getUser());
                    changeToJuego(0);                    
                }
            }
        });
        
        principal.getJugar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                if(!principal.getUser().equals("")) {
                    gestor.setUsuario(principal.getUser());
                    changeToJuego(1);
                }
            }
        });
    }
    
    private void initFinFase(){
        finfase= new PFinFase();
        finfase.setSize(new Dimension(width, height));
        finfase.setVisible(false);
        
        finfase.getMenu().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToPrincipal();
            }
        });
        
        finfase.getSiguiente().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToJuego(-1);
            }
        });
        
        finfase.getRanking().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToRanking(finfase.getF());
            }
        });
    }    
    
    private void initRanking(){
        ranking = new PRanking();
        ranking.setSize(new Dimension(width, height));
        ranking.setVisible(false);
        
        ranking.getVolver().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent ae) {
                changeToFinFase(ranking.getF());
            }
        });
    }
    
    public void initGameOver(){
        gameover=new PGameOver();
        gameover.setSize(new Dimension(width, height));
        gameover.setVisible(false);
        
        gameover.getBtMenu().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                changeToPrincipal();
            }
        });
        
        gameover.getBtReintentar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                changeToJuego(gestor.getFase().getNumero());
            }
        });
    }

    public void vidaPerdida(){
        juego.setjLabel3(gestor.getFase().getVida()-1);
        if(gestor.getFase().perderVida()){
            gestor.parar();
            changeToGameOver();
        }
    }
    
}
